//二叉树
#pragma once
//二叉树的存储结构
template <typename E>
struct BiTNode
{
    E data;
    BiTNode *lchild,*rchild;
};

template <typename E>
using BiTree = BiTNode<E> *;

//先序遍历二叉树 T，用visit 访问每个节点
template <typename E,typename F>
void PreOrder (BiTree<E> T,F visit)
{
    if (T)
    {
        visit(T->data);
        PreOrder(T->lchild,visit);
        PreOrder(T->rchild,visit);
    }
}

//后续遍历二叉树T,用visit访问每个结点
template <typename E,typename F>
void PostOrder(BiTree<E> T,F visit)
{
    if(T)
    {
         PostOrder(T->lchild,visit);
         PostOrder(T->rchild,visit);
         visit(T->data);
    }
}